package com.itheima.health.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.health.dao.CheckGroupMapper;
import com.itheima.health.entity.PageResult;
import com.itheima.health.entity.QueryPageBean;
import com.itheima.health.pojo.CheckGroup;
import com.itheima.health.pojo.CheckGroupItem;
import com.itheima.health.service.CheckGroupService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 2024/7/4-23:09
 * 功能:
 */
@Service
@Slf4j
public class CheckGroupServiceImpl implements CheckGroupService {


    @Resource
    private CheckGroupMapper checkGroupMapper;

    @Override
    public List<CheckGroup> findAll() {
        // 1.调用DAO 查询所有检查组
        List<CheckGroup> checkGroups = checkGroupMapper.findAll();
        // 2.返回所有检查组
        return checkGroups;
    }

    @Override
    public void edit(CheckGroup checkGroup, Integer[] checkItemIds) {
        // 1.调用DAO 编辑检查组
        checkGroupMapper.edit(checkGroup);

        // 2.调用DAO 根据检查组id删除中间表数据（清理原有关联关系）
        checkGroupMapper.deleteAssociation(checkGroup.getId());

        // 3.调用DAO 在中间表中添加检查组中包含的检查项
        setCheckGroupAndCheckItem(checkGroup.getId(), checkItemIds);
    }

    @Override
    public List<Integer> findCheckItemIdsByCheckGroupId(Integer checkGroupId) {
        // 1.调用DAO根据检查组id查询对应的所有检查项id
        List<Integer> checkItemIds = checkGroupMapper.findCheckItemIdsByCheckGroupId(checkGroupId);

        // 2.返回检查组合的所有检查项id
        return checkItemIds;
    }

    @Override
    public CheckGroup findById(Integer id) {
        // 1.调用DAO根据id查询检查组
        CheckGroup checkGroup = checkGroupMapper.findById(id);

        // 2.返回检查组对象
        return checkGroup;
    }

    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        // 1.使用分页插件开始分页
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        // 2.调用DAO分页查询
        Page<CheckGroup> page = checkGroupMapper.findPage(queryPageBean.getQueryString());
        return new PageResult(page.getTotal(), page.getResult());
    }

    @Override
    public CheckGroupItem isExist(Integer id) {
        CheckGroupItem checkGroupItem = checkGroupMapper.isExist(id);
        return checkGroupItem;
    }

    @Override
    public void add(CheckGroup checkGroup, Integer[] checkItemIds) {
        // 添加检查组
        checkGroupMapper.add(checkGroup);

        // 在中间表中指定检查组中包含的检查项
        setCheckGroupAndCheckItem(checkGroup.getId(), checkItemIds);
    }

    /**
     * 在中间表插入检查组id和检查项的id,形成关联
     *
     * @param checkGroupId 检查组id
     * @param checkItemIds 检查组对应的所有检查项
     */
    public void setCheckGroupAndCheckItem(Integer checkGroupId, Integer[] checkItemIds) {
        if (checkItemIds == null || checkItemIds.length == 0) {
            System.out.println("用户没有选择检查项");
            return;
        }

        // 遍历得到每个检查项id
        for (Integer checkItemId : checkItemIds) {
            // 调用DAO往数据新增一个检查组id和一个检查项id
            checkGroupMapper.setCheckGroupAndCheckItem(checkGroupId, checkItemId);
        }
    }

    @Override
    public Boolean delete(Integer id) {
        if (id == null)throw new RuntimeException("id不存在");
       CheckGroupItem item = checkGroupMapper.isExistGroup(id);
       if (item != null)return false;
        Boolean delete = checkGroupMapper.deleteGroup(id);
        return delete;
    }
}
